package seqlist.stack_queue.leetcode;

import java.util.Stack;

/**
 * @author yuisama
 * @date 2023/03/22 18:57
 * 逆波兰表达式
 **/
public class Num150_EvalRPN {
    public int evalRPN(String[] tokens) {
        Stack<Integer> stack = new Stack<>();
        for (String str : tokens) {
            // 碰到数字直接入栈
            if (isNum(str)) {
                stack.push(Integer.parseInt(str));
            }else {
                // 碰到的是运算符
                // 将栈中的数字连着取出两个
                // 先弹出的是除数或减数
                int num1 = stack.pop();
                // 被除数或被减数
                int num2 = stack.pop();
                int result = 0;
//                switch (str) {
//                    case "+" :
//                        result = num2 + num1;
//                        break;
//                    case "-" :
//                        result = num2 - num1;
//                        break;
//                    case "*" :
//                        result = num2 * num1;
//                        break;
//                    default:
//                        result = num2 / num1;
//                }
//                switch (str) {
//                    case "+" -> result = num2 + num1;
//                    case "-" -> result =num2 - num1;
//                    case "*" -> result =num2 * num1;
//                    case "/" -> result =num2 / num1;
//                }
                stack.push(result);
            }
        }
        return stack.pop();
    }

    private boolean isNum(String str) {
        try {
            Integer.parseInt(str);
            return true;
        }catch (Exception e) {
            return false;
        }
    }
}